package org.ehe.erp.domain.finance.bo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ehe.common.core.validate.AddGroup;
import org.ehe.common.core.validate.EditGroup;
import org.ehe.erp.domain.finance.ErpFinancePayment;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @author :zhangnn
 * @className :ErpFinancePaymentBo
 * @description: TODO
 * @date 2025-08-18 14:20:11
 */
@Data
@EqualsAndHashCode(callSuper = false)
@AutoMapper(target = ErpFinancePayment.class, reverseConvertGenerate = false)
public class ErpFinancePaymentBo {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 付款单号（系统自动生成，可手动输入）
     */
    @NotBlank(message = "付款单号不能为空", groups = { EditGroup.class })
    private String no;


    /**
     * 采购单号
     */
    private String purchaseOrderNo;

    /**
     * 批次id
     */
    private Long batchId;
    /**
     * 批次名称
     */
    private String batchName;

    /**
     * 状态（0-草稿，1-已审核，2-已付款，9-已取消）
     */
    private Integer status;

    /**
     * 付款时间
     */
    @NotNull(message = "付款时间不能为空", groups = { AddGroup.class, EditGroup.class })
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime paymentTime;

    /**
     * 财务人员编号
     */
    @NotNull(message = "财务人员编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long financeUserId;

    /**
     * 供应商编号
     */
    @NotNull(message = "供应商编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long supplierId;

    /**
     * 付款账户编号
     */
    @NotNull(message = "付款账户编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long accountId;

    /**
     * 合计价格，单位：元
     */
    @NotNull(message = "总价格不能为空", groups = { AddGroup.class, EditGroup.class })
    @DecimalMin(value = "0.01", message = "总价格必须大于0")
    private BigDecimal totalPrice;

    /**
     * 优惠金额，单位：元
     */
    @DecimalMin(value = "0.00", message = "优惠金额不能为负数")
    private BigDecimal discountPrice;

    /**
     * 实付金额，单位：元（系统自动计算：总价格-优惠金额）
     */
    private BigDecimal paymentPrice;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建部门
     */
    private Long createDept;

    // 查询条件扩展字段

    /**
     * 付款时间-开始
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime paymentTimeStart;

    /**
     * 付款时间-结束
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime paymentTimeEnd;

    /**
     * 付款金额-最小值
     */
    private BigDecimal paymentPriceMin;

    /**
     * 付款金额-最大值
     */
    private BigDecimal paymentPriceMax;

    /**
     * 供应商名称（用于查询显示）
     */
    private String supplierName;

    /**
     * 财务人员姓名（用于查询显示）
     */
    private String financeUserName;

    /**
     * 账户名称（用于查询显示）
     */
    private String accountName;
}
